The bottleneck may not be memory; adding RAM has a cost and a ceiling
The answer 'add more RAM' is a valid answer only when the bottleneck is memory-bound and the deployment can scale vertically. In a system design interview, it is usually a signal that the candidate has not diagnosed the bottleneck. The first reason it is not always valid is that the bottleneck may be CPU, I/O, network, or the coordinator, not memory. A query that is CPU-bound on distance computations will not get faster with more RAM. A query that is limited by the coordinator's merge work will not get faster with more RAM. A query that is limited by network round trips between nodes will not get faster with more RAM. The second reason is that vertical scaling has a ceiling: the largest machine available may not be enough, and the cost per unit of RAM grows super-linearly at the top end. The third reason is that adding RAM to a single node does not help if the data is sharded across nodes: the query still fans out, and the slowest shard bounds the latency. The fourth reason is that adding RAM may not address the actual cost driver, which could be the optimizer competing for resources, a suboptimal index configuration, or an inefficient query pattern. The right answer starts with diagnosing the bottleneck, then choosing the lever that addresses it.
The mechanism that makes 'add more RAM' appealing but often wrong is that RAM is the most visible resource and the one that most directly affects page-cache hit rate, which is a common cause of tail latency. So there are real cases where adding RAM is the right answer: an on-disk collection whose working set does not fit in cache, where adding RAM increases the hit rate and reduces p99. But those cases must be diagnosed, not assumed. The diagnosis is to measure the bottleneck: CPU utilization, disk I/O, network, page-cache hit rate, coordinator latency, and the distribution of query latency. If CPU is saturated and disk is idle, the bottleneck is CPU. If disk is saturated and CPU is idle, the bottleneck is I/O. If both are moderate and latency is high, the bottleneck may be the coordinator or the network. Only after identifying the bottleneck can you choose the lever. The levers include: reducing ef (CPU), reducing the working set with quantization (memory), sharding (distribution), adding replicas (read capacity), tuning the optimizer (background contention), and improving the query pattern (fewer candidates, better filters). Adding RAM is one of the levers, not the default.
Diagnose first: identify whether the bottleneck is CPU, memory, disk, network, or coordinator.
CPU-bound: reduce ef, reduce candidates, add cores, or shard for parallelism.
Memory-bound: add RAM, quantize, reduce the working set, or move data on-disk.
I/O-bound: use NVMe, quantize, use inline storage, or add RAM for the page cache.
Network/coordinator-bound: reduce shard count or use custom sharding to avoid fan-out.
Optimizer contention: tune the optimizer thresholds or schedule it off-peak.
Vertical ceiling: the largest machine may not be enough; cost grows super-linearly.
Sharding: adding RAM to one node does not help if the query fans out to many nodes.
The trade-off is between the simplicity of vertical scaling and the flexibility of diagnosing and addressing the specific bottleneck. Vertical scaling is fast and simple but has a ceiling and a cost. Diagnosis takes time but leads to the right fix. The common mistakes are: (1) adding RAM without measuring the bottleneck; (2) assuming the bottleneck is memory because the collection is large; (3) ignoring the cost of the largest instances, which can be several times the cost per unit of a smaller instance; (4) not considering that the bottleneck may be a single shard or the coordinator; (5) treating 'add more RAM' as a complete answer rather than one of several levers. Version note: the metrics available to diagnose the bottleneck and the behavior of the optimizer have changed across Qdrant releases. Use the metrics available on your version and correlate them with client-side latency rather than relying on a fixed recipe.
Version-dependent: the metrics exposed by Qdrant and the behavior of the optimizer have changed across releases. Use the metrics available on your version and correlate them with client-side latency.
Your Qdrant deployment is slow and a teammate says to add RAM. Explain what you would check first.
You add RAM to a node and latency does not improve. Explain the likely reasons.
You diagnose a CPU-bound workload and a teammate wants to add RAM. Explain why RAM will not help and what you would do instead.
You have a memory-bound workload but the largest machine is not big enough. Describe the alternatives.
Design a diagnostic procedure that identifies the bottleneck in a Qdrant deployment in under an hour, and describe the levers for each bottleneck type.
You need to reduce cost without regressing latency. Describe how you would identify whether the deployment is over-provisioned or under-provisioned.
Derive a model for the cost of a Qdrant deployment as a function of the workload and the bottleneck, and explain how you would minimize the cost for a given SLO.
You are designing a system that must scale from 10M to 10B vectors. Describe the scaling roadmap and the points at which the bottleneck changes.